
package oris.components;

import javax.swing.JFrame;

public class MoveThread {
    private int locationX;
    private int locationY;
    private JFrame frame;
    private boolean isMoving = false;

    /**
     * Contrói a thread.
     * A thread só é iniciada após chamar o método startMove.
     * @param frame
     */
    public MoveThread(JFrame frame) {
        this.frame = frame;
        
        this.locationX = frame.getLocation().x;
        this.locationY = frame.getLocation().y;
    }

    /**
     * Atualiza a thread com as novas localizações.
     * @param locationX A posição no eixo X.
     * @param locationY A posição no eixo Y.
     */
    public void update(int locationX, int locationY) {
        this.locationX = locationX;
        this.locationY = locationY;
    }

    /**
     * Inicia o funcionamento da thread.
     */
    public void startMove() {
        isMoving = true;
        new Thread(new Move()).start();
    }
    
    /**
     * Pára o funcionamento da thread.
     */
    public void stopMoving() {
        this.isMoving = false;
    }

    /**
     * Verifica se a thread está em funcionamento.
     * @return Verdadeiro se ela está funcionando.
     */
    public boolean isMoving() {
        return isMoving;
    }

    private class Move implements Runnable{
        
        @Override
        public void run() {
            while (isMoving) {
                frame.setLocation(locationX, locationY);
                
                //frame.getContentPane().invalidate();
                //frame.getContentPane().validate();
                frame.repaint();

                //Dá um tempo a thread
                //Necessário para não consumir muito a cpu
                try {
                    Thread.sleep(50);
                }
                catch (InterruptedException e){}
            }
        }
        
    }
    
}
